import { EnumRoutePath } from '@/enum'
import { LoginModuleType } from '@/interface'
import { RouteNameMap } from '@/router/helpers'
import { useRouter } from 'vue-router'

export default function useRouterChange() {
  const router = useRouter()

  function toHome() {
    router.push('/')
  }

  function toRedirectName(routeName: string) {
    router.push({
      name: routeName,
    })
  }

  /** 登录后跳转重定向的地址 */
  function toLoginRedirectUrl(path: EnumRoutePath) {
    router.push(path)
  }

  function toReload(redirectUrl: string) {
    router.push({
      path: EnumRoutePath.reload,
      query: { redirectUrl },
    })
  }

  /**
   * 跳转登录页面(通过 vue 路由)
   */
  function toLogin(module: LoginModuleType = 'pwd-login', redirectUrl?: string) {
    router.push({
      name: RouteNameMap.get('login'),
      // params 除了 router.push 时需要对象指定 params 属性外
      // 还需要在 routes 的指定路由项的 path 字段添加动态字段(以冒号开头)
      // 通过 route.params 可以拿到，path 中没有指定动态字段，则即使 router.push 传递也拿不到
      // 个人觉得 params 使用不如 query 方便
      params: {
        module,
      },
      query: {
        // 跳转后在浏览器地址栏中会有 ?redirectUrl=xxx 的参数，不用更改 route 的 path
        // 通过 route.query 可以拿到 query 中的内容
        redirectUrl,
      },
    })
  }

  return { toLogin, toHome, toRedirectName, toLoginRedirectUrl, toReload }
}
